函数
fegetround (C++11)
int fegetround(void);
获取舍入方向模式
返回当前 浮点环境 中表明舍入方向模式的值。
这个函数的返回值不一定和 cfloat 中 FLT_ROUNDS 的值相同。
参数
无
返回值
如果这个函数能决定当前舍入模式,并且被当前实现支持,那么函数返回值对应的宏定义如下:
宏值 | 描述 |
---|---|
FE_DOWNWARD | 向下舍入模式 (宏) |
FE_TONEAREST | 四舍五入模式 (宏) |
FE_TOWARDZERO | 朝零舍入模式 (宏) |
FE_UPWARD | 向上舍入模式 (宏) |
特定的库实现可能会支持附加的 浮点舍入方向 值(它们对应的宏同样以 FE_ 开头的宏)。
C99
库可能定义在 <fenv.h>,仅仅支持上面这些宏值(其他可能没有被定义)。
C++11
至少上面所有的宏值都定义在 <fenv.h> 中(即使实现不支持)。
例子
/* fegetround / rint example */
#include <stdio.h> /* printf */
#include <fenv.h> /* fegetround FE_* */
#include <math.h> /* rint */
int main()
{
printf("Rounding using ");
switch(fegetround())
{
case FE_DOWNWARD:
printf("downward");
break;
case FE_TONEAREST:
printf("to-nearset");
break;
case FE_TOWARDZERO:
printf("toward-zero");
break;
case FE_UPWARD:
printf("upward");
break;
default:
printf("unknown");
}
printf(" rounding:\n");
printf("rint (2.3) = %.1f\n", rint(2.3));
printf("rint (3.8) = %.1f\n", rint(3.8));
printf("rint (-2.3) = %.1f\n", rint(-2.3));
printf("rint (-3.8) = %.1f\n", rint(-3.8));
return 0;
}
可能的输出:
Rounding using to-nearset rounding:
rint (2.3) = 2.0
rint (3.8) = 4.0
rint (-2.3) = -2.0
rint (-3.8) = -4.0
数据竞争
每个线程都保持着分离的、拥有自己状态的 浮点环境 。产生一个新线程就复制当前状态。[ 这个适用于 C11 和 C++11 的实现 ]
异常
不抛出异常的保证:这个函数从不抛出异常。
另请参见
函数 | 描述 |
---|---|
fesetround | 设置舍入方向模式 (函数) |
fegetenv | 获取浮点环境 (函数) |
rint | 舍入至整数值 (函数) |
当前内容版权归 chrisniael 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 chrisniael .